package com.utf999.qiangmanger.service.iface.redis;

import com.utf999.qiangmanger.exception.BizException;

/**
 * 这个服务层接口用于定义基于redis的“在线用户”功能的服务
 * 该接口包含三类redis结构的操作：<br>
 * 1、用户、设备和token的映射关系
 * 2、token和用户、设备的反向映射关系
 * 3、onlineUserNumber的set（用户名集合） 
 * @author yinwenjie
 */
public interface IRedisOnlineUserService {
	/**
	 * 将一个刚刚上线的用户保存到redis缓存中。
	 * @param username 登录用户的用户名信息
	 * @param device 登录用户的设备信息
	 * @param token 在登录系统后，系统会生成一个全系统唯一的token号（token号的生成由其他service处理）
	 * @throws BizException 业务相关的异常,则会抛出该异常
	 * @throws JIDFormatException 如果userjid验证出现问题，则抛出JIDFormatException异常
	 * @return 如果redis缓存添加成功，则返回true，其他情况返回false
	 */
	public boolean registUser(String username , String device , String token) throws BizException;
	
	/**
	 * 根据一个token号，取得这个token对应"appName_username,device"信息。两个信息将以“，”符号分割
	 * @param token 给定的token信息
	 * @return 如果没有取得对应的用户信息，则返回null
	 * @throws BizException 业务相关的异常,则会抛出该异常
	 */
	public String getUserinfoByToken(String token) throws BizException;
	
	/**
	 * 根据一个用户的用户名和设备信息，获取当前对应的token信息
	 * @param username 用户名
	 * @param device 设备信息
	 * @return 如果没有取得对应的token信息，则返回null
	 * @throws BizException
	 */
	public String getTokenByUserinfo(String username , String device) throws BizException;
	
	/**
	 * 该方法检查指定的用户是否在线。
	 * @param username 登录的用户名信息。
	 * @param device 登录的设备信息。
	 * @throws BizException 业务相关的异常,则会抛出该异常
	 * @throws JIDFormatException 如果userjid验证出现问题，则抛出JIDFormatException异常
	 * @return 如果发现当前用户在线，则返回true；其他情况返回false。
	 */
	public boolean isUserOnline(String username , String device) throws BizException;
	
	/**
	 * 注销一个已经登录的用户（使用用户名+设备信息的方式）在redis中的token、username、device的映射关系
	 * @param username 用户名
	 * @param device 设备信息
	 * @return 如果注销成功，则返回true，其他情况返回
	 * @throws BizException
	 */
	public boolean unRegistUser(String username , String device) throws BizException;
	
	/**
	 * 注销一个已经登录的用户（使用token信息的方式）在redis中的token、username、device的映射关系
	 * @param token 已登录的token信息
	 * @return 如果注销成功，则返回true，其他情况返回
	 * @throws BizException
	 */
	public boolean unRegistUser(String token) throws BizException;
}